package licode.unisop.client.api.auth;

import licode.unisop.client.info.*;
import licode.unisop.client.vo.SopAuthResult;
import licode.unisop.client.vo.SopAuthUser;
import licode.unisop.client.vo.SopCredential;

import java.util.Map;

/**
 * APP认证接口定义
 *
 * @author WR
 */
public interface SopUserAuth {
    /**
     * 获取验证码
     * @return 验证码
     */
    Map<String, Object> getCaptchaCode();

    /**
     * 更新当前登录用户密码
     * @param info 更新信息
     */
    String updatePassword(SopUpdatePasswordIn info);

    /**
     * 认证用户
     * @param accReq 账号信息
     * @return 跳转地址
     */
    SopAuthResult authorize(SopAuthIn accReq);
    SopAuthResult authorizeDirect(SopAuthDirectIn accReq);

    /**
     * 通过code换取用户登录认证
     *
     * @param authToken 客户端信息
     * @return 返回认证后用户信息
     */
    SopAuthUser token(SopCodeInfo authToken);

    /**
     * 用户登录认证
     *
     * @param accReq 认证用户信息
     * @return 返回认证后用户信息
     */
    SopAuthUser login(SopAuthIn accReq);
    SopAuthUser loginDirect(SopAuthDirectIn accReq);

    /**
     * 刷新用户访问令牌
     *
     * @param authToken 用户已认证信息
     * @return 返回新的认证信息
     */
    SopCredential refresh(SopTokenInfo authToken);

    /**
     * 退出当前子会话
     * @param authToken 当前登录令牌
     */
    void logout(SopTokenInfo authToken);

    void logoutUser(SopUserIdIn req);

    /**
     * 退出用户会话
     * @param authToken 当前登录令牌
     */
    void logoutSession(SopTokenInfo authToken);
}
